﻿using System;
using System.Collections;
using System.Linq;
using System.Text;
using NGI_Enumerador;

namespace NGI_Entidades
{
    public class FacturaCabecera : CamposAuditoria
    {
        #region Propiedades
        private Int32 _id = 0;
        private Cliente _cliente;
        private DateTime _fecha = DateTime.Now;
        private CondicionesVenta _condicionVenta = CondicionesVenta.Contado;
        private Int32 _categoriaIVA = 1;
        private String _remito = "";
        private Double _subTotal = 0.0f;
        private Double _subTotalImpuestos = 0.0f;
        private Double _impuestos = 0.0f;
        private Double _procentajeIVA = 0.0f;
        private Double _subTotalFinal = 0.0f;
        private Double _total = 0.0f;
        private String _observaciones = "";
        #endregion Propiedades

        #region Getters y Setters
        public Int32 ID
        {
            get { return _id; }
            set { _id = value; }
        }

        public DateTime Fecha
        {
            get { return _fecha; }
            set { _fecha = value; }
        }

        public Cliente Cliente
        {
            get { return _cliente; }
            set { _cliente = value; }
        }

        public CondicionesVenta CondicionVenta
        {
            get { return _condicionVenta; }
            set { _condicionVenta = value; }
        }

        public String Remito
        {
            get { return _remito; }
            set { _remito = value; }
        }

        public Double SubTotal
        {
            get { return _subTotal; }
            set { _subTotal = value; }
        }

        public Double SubTotalImpuestos
        {
            get { return _subTotalImpuestos; }
            set { _subTotalImpuestos = value; }
        }

        public Double Impuestos
        {
            get { return _impuestos; }
            set { _impuestos = value; }
        }

        public Double PorcentajeIVA
        {
            get { return _procentajeIVA; }
            set { _procentajeIVA = value; }
        }

        public Double SubTotalFinal
        {
            get { return _subTotalFinal; }
            set { _subTotalFinal = value; }
        }

        public Double Total
        {
            get { return _total; }
            set { _total = value; }
        }

        public String Observaciones
        {
            get { return _observaciones; }
            set { _observaciones = value; }
        }

        public Int32 CategoriaIVA
        {
            get { return _categoriaIVA; }
            set { _categoriaIVA = value; }
        }
        
        #endregion Getters y Setters

        #region Constructores
        public FacturaCabecera() { }

        public FacturaCabecera(DateTime Fecha, Cliente unCliente, Int32 CategoriaIVA, String Remito, CondicionesVenta CondicionVenta, Double SubTotal, Double Impuestos, Double SubtotalImpuestos, Double PorcentajeIVA, Double SubtotalIVA, Double Total)
        {
            this._cliente = unCliente;
            this._fecha = Fecha;
            this._remito = Remito;
            this._condicionVenta = CondicionVenta;
            this._categoriaIVA = CategoriaIVA;
            this._subTotal = SubTotal;
            this._impuestos = Impuestos;
            this._subTotalImpuestos = SubtotalImpuestos;
            this._procentajeIVA = PorcentajeIVA;
            this._subTotalFinal = SubtotalIVA;
            this._total = Total;
        }
        #endregion Constructores

        #region Constructores Estáticos
        public static FacturaCabecera Nuevo()
        {
            return new FacturaCabecera();
        }

        public static FacturaCabecera FacturaA(DateTime Fecha, Cliente unCliente, Int32 CategoriaIVA, String Remito, CondicionesVenta CondicionVenta, Double SubTotal, Double Impuestos, Double SubtotalImpuestos, Double PorcentajeIVA, Double SubtotalIVA, Double Total)
        {
            return new FacturaCabecera(Fecha, unCliente, CategoriaIVA, Remito, CondicionVenta, SubTotal, Impuestos, SubtotalImpuestos, PorcentajeIVA, SubtotalIVA, Total);
        }
        #endregion Constructores Estáticos
    }
}
